 <?php
/**
 * Singleton.class.php5
 * 
 * @author		Joachim Ruf
 * @copyright	Copyright (c) 2003-2010 Loresoft Software (http://www.loresoft.de)
 * @license		http://yapary.loresoft.de/lizenzbedingungen     New BSD License
 * 
 * Verwendung:
 * Wenn nur ein Objekt zu einer Klasse existieren darf
 * und ein einfacher Zugriff auf dieses Objekt benoetigt wird
 * 
 * Anwendung
 * ein zentrales Protokoll-Objekt, das Ausgaben in einer Datei speichert
 * 
 * */


Class Yapary_Pattern_Singleton
{
    /** @var Array aller Instanzen */
	private static $instance = array();


	/**
	* private, um Instanziierung zu verhindern
	*/
	private function __construct ()
	{
		/** do nothing */
	}
		

	/**
	* private, um das Klonen zu verhindern
	*/
	private function __clone ()
	{
		/** do nothing */
	}


	/**
	* Definiert ein neues Object (ohne es zurueck zu geben)
	* @param object $object	: Object, welches gespeichert werden soll
	* @return object
	*/
	public static function setInstance ($object)
	{
	    if (!is_object($object)) {
	        trigger_error('Parameter1 is not a valid object', E_ERROR);
	    }
	    
	    $objName = get_class($object);
	    self::$instance[$objName] = $object;
	}

	
	/**
	* Gibt das entsprechende Objekt als Singleton aus.
	* Sollte das Objekt im Singleton noch nicht existieren, wird es zuvor noch definiert
	* @param object $object	: Object, welches als Singleton ausgegeben werden soll
	* @return object
	*/
	public static function getInstance ($object)
	{
	    $objName = get_class($object);
	    
	    if (!is_object($object)) {
	        trigger_error('Parameter1 is not a valid object', E_ERROR);
        }
        if (!isset(self::$instance[$objName])) {
		    self::$instance[$objName] = $object;
        }

		return self::$instance[$objName];
	}

	
}


?>
